package com.example.imgrecognition.Util;

import java.util.ArrayList;
import java.util.List;

public class ArrayUtil {
    /**
     * 将一个数组拆分成多个
     * 要分割的数组
     * 分割大小
     */
    public static List<byte[]> spliteArray(byte[] bytes,int splitSize) throws Exception{
        if(null == bytes){
            throw new Exception("格式错误");
        }
        //拆分后数组对象
        List<byte[]> arrayList = new ArrayList<byte[]>();
        //总长度
        int byteLength = bytes.length;

        //获取要循环的次数
        int forCount = 0;
        boolean flag = false;
        if(byteLength % splitSize!=0){
            forCount = (byteLength / splitSize)+1;
            flag = true;
        }else{
            forCount = (byteLength / splitSize);
        }
        //临时目标数组
        byte[] spliteByte = null;
        //循环分割
        for(int i=0;i<forCount;i++){
            //目标数组接收复制数据的起始位置
            int destPos = i * splitSize;
            if((i+1) == forCount){
                if(flag){
                    splitSize = byteLength - destPos;
                }
            }
            //初始化数组
            spliteByte = new byte[splitSize];
            //复制
            System.arraycopy(bytes,destPos,spliteByte,0,splitSize);
            arrayList.add(spliteByte);
        }
        return arrayList;
    }

    public static byte[] mergeBytes(List<byte[]> bytes) throws Exception{
        if(null == bytes){
            throw new Exception("格式错误");
        }
        int arrayLength = 0;
       for(int i = 0;i<bytes.size();i++){
            arrayLength += bytes.get(i).length;
       }
       //目标数组接收复制数据的起始位置
        int destPos = 0;
        //目标数组
        byte[] countArray = new byte[arrayLength];
        for(int i=0;i<bytes.size();i++){
            //源数组
            byte[] sourceArray = bytes.get(i);
            //复制
            System.arraycopy(sourceArray,0,countArray,destPos,sourceArray.length);
            //目标数组接收复制数据的起始位置
            destPos += sourceArray.length;
        }
        return countArray;
    }
}
